
package com.boot.springBoot.util;

import java.math.BigDecimal;

import org.apache.commons.lang3.StringUtils;



/**
 * 工作中用到的 Double在java的商业计算中会丢失精度 古涉及金额的 全部用  BigDecimal来计算
 * @author Administrator
 *
 */
public class BigDecimalUtil {
	
	private static final String add = "+";
	private static final String subtract = "-";
	private static final String multiply = "x";
	private static final String divide = "/";
	
	/**
	 * 计算金额
	 * @param a  
	 * @param b
	 * @param format     要求 + — x / 加减乘除
	 * @return  一个保留两位小数 四舍五入的字符串数字
	 */
	private static String getBigDecimalNumber(Double a,Double b,String format){
		
		/**
		 * Java程序的三部曲      判断参数   
		 * 		1.存不存在
		 * 		2.空不空
		 * 		3.合不合法
		 */
		if(StringUtils.isBlank(String.valueOf(b)) || StringUtils.isBlank(String.valueOf(a))){
			return "参数非法！";
		}
		if(StringUtils.isBlank(format)){
			return "请传入运算规则：+ - x /";
		}
		
		/**
		 * 	public BigDecimal add(BigDecimal value);//加法
			public BigDecimal subtract(BigDecimal value);//减法 
			public BigDecimal multiply(BigDecimal value);//乘法
			public BigDecimal divide(BigDecimal value);//除法
		 */
		BigDecimal bigd =null;
		if("+".equals(format)){
			bigd = new BigDecimal(a).add(new BigDecimal(b));
		}else if("-".equals(format)){
			bigd = new BigDecimal(a).subtract(new BigDecimal(b));
		}else if("x".equals(format)){
			bigd = new BigDecimal(a).multiply(new BigDecimal(b)).setScale(2, BigDecimal.ROUND_UP);
		}else{
			/**
			 * 保留两位小数  并四舍五入
			 */
			bigd = new BigDecimal(a).divide(new BigDecimal(b),2,BigDecimal.ROUND_UP);
		}
		return String.valueOf(bigd);
	}
	
	public static void main(String[] args) {
		double a = 1234.5;
		Double b = 100.0;
//		System.out.println(getBigDecimalNumber(a,b,add));
//		System.out.println(getBigDecimalNumber(a,b,subtract));
//		System.out.println(getBigDecimalNumber(a,b,multiply));
//		System.out.println(getBigDecimalNumber(a,b,divide));
		BigDecimal x = new BigDecimal(1500.05);
		BigDecimal y = new BigDecimal("1000");
		BigDecimal z = x.subtract(y).subtract(new BigDecimal(b)).setScale(2, BigDecimal.ROUND_UP);
		int big = x.compareTo(y);
		System.out.println("z=="+z+",big=="+big);
	}
}
